// 库函数
#include <stdio.h>
#include <stdint.h>
#include <cmsis_os2.h>
// Hal库函数
#include <main.h>
// 自定义函数
#include "sys.h"

osEventFlagsId_t buttonEvent;      // 按键事件标志
osEventFlagsId_t pwmBtnEvent;      // PWM灯按键事件标志
osEventFlagsId_t irSensorEvent;    // 红外传感器事件标志
osEventFlagsId_t lightSensorEvent; // 光感传感器事件标志

/* 创建事件标志 */
void SYS_Init(void)
{
    buttonEvent = osEventFlagsNew(NULL);
    pwmBtnEvent = osEventFlagsNew(NULL);
    irSensorEvent = osEventFlagsNew(NULL);
    lightSensorEvent = osEventFlagsNew(NULL);

    if (buttonEvent == NULL || pwmBtnEvent == NULL || irSensorEvent == NULL || lightSensorEvent == NULL)
    {
        printf("[SYS_Init] Failed to create event flags!\r\n");
        return;
    }
}

/* 中断回调函数 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    switch (GPIO_Pin)
    {
    case BUTTON_Pin:
        // printf("[EXTI Callback] Trigger key interrupt function.\r\n");
        osEventFlagsSet(buttonEvent, 0X0001); // 设置事件标志
        break;
    case IR_SENSOR_Pin:
        // printf("[EXTI Callback] Trigger irSensor interrupt function.\r\n");
        osEventFlagsSet(irSensorEvent, 0X0001);
        break;
    case PWM_BTN_Pin:
        osEventFlagsSet(pwmBtnEvent, 0X0001);
        break;
    case LIGHT_BTN_Pin:
        osEventFlagsSet(lightSensorEvent, 0X0001);
        break;
    default:
        printf("[EXTI Callback] There is no such interrupt event.\r\n");
        break;
    }
}
